package leetcode;

public class LeetCode43 {

    public static void main(String[] args) {
        LeetCode43 leetCode43 = new LeetCode43();
        System.out.println(Integer.toBinaryString(103));
        leetCode43.multiply("2", "3");
    }

//    public String multiply(String num1, String num2) {
//        StringBuilder sb = new StringBuilder();
//        int p = num1.length() - 1, q = num2.length() - 1, next = 0;
//        while (p >= 0 && q >= 0) {
//            int tmp = (num1.charAt(p) - '0') * (num2.charAt(q) - '0') + next;
//            sb.append(tmp % 10);
//            next = tmp / 10;
//            p--;
//            q--;
//        }
//        while (p >= 0) {
//            int tmp = (num1.charAt(p) - '0') + next;
//            sb.append(tmp % 10);
//            next = tmp / 10;
//            p--;
//        }
//        while (q >= 0) {
//            int tmp = (num1.charAt(q) - '0') + next;
//            sb.append(tmp % 10);
//            next = tmp / 10;
//            q--;
//        }
//        if (next != 0)
//            sb.append(next);
//        return sb.reverse().toString();
//    }

    public String multiply(String num1, String num2) {
        if (num1.equals("0") || num2.equals("0")) {
            return "0";
        }
        // 保存计算结果
        String res = "0";

        // num2 逐位与 num1 相乘
        for (int i = num2.length() - 1; i >= 0; i--) {
            int carry = 0;
            // 保存 num2 第i位数字与 num1 相乘的结果
            StringBuilder temp = new StringBuilder();
            // 补 0
            for (int j = 0; j < num2.length() - 1 - i; j++) {
                temp.append(0);
            }
            int n2 = num2.charAt(i) - '0';

            // num2 的第 i 位数字 n2 与 num1 相乘
            for (int j = num1.length() - 1; j >= 0 || carry != 0; j--) {
                int n1 = j < 0 ? 0 : num1.charAt(j) - '0';
                int product = (n1 * n2 + carry) % 10;
                temp.append(product);
                carry = (n1 * n2 + carry) / 10;
            }
            // 将当前结果与新计算的结果求和作为新的结果
            res = addStrings(res, temp.reverse().toString());
        }
        return res;
    }

    /**
     * 对两个字符串数字进行相加，返回字符串形式的和
     */
    public String addStrings(String num1, String num2) {
        StringBuilder builder = new StringBuilder();
        int carry = 0;
        for (int i = num1.length() - 1, j = num2.length() - 1;
             i >= 0 || j >= 0 || carry != 0;
             i--, j--) {
            int x = i < 0 ? 0 : num1.charAt(i) - '0';
            int y = j < 0 ? 0 : num2.charAt(j) - '0';
            int sum = (x + y + carry) % 10;
            builder.append(sum);
            carry = (x + y + carry) / 10;
        }
        return builder.reverse().toString();
    }
//------------------------------------------------------------------
}
